﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using condortravel.operaciones.core.DataModel;

using condortravel.operaciones.persistence.operacionesImpl;
using condortravel.operaciones.entities.Entities;

namespace condortravel.operaciones.business.operaciones
{

    public interface OperacionesServices
    {

        #region Seguimiento de operaciones

        List<Tb_ItinerarioViajero> getListItinerarioByCriteria(FilterItinerarioCriteria criteria);
        List<Tb_ItinerarioViajero> getListItinerarioByAgente(FilterItinerarioCriteria criteria);
        List<Tb_ItinerarioViajero> getListItinerarioByCliente(int cliente);
        Tb_ItinerarioViajero getItinerarioByCodigo(int codigoItinerario);
        void updateItinerario(Tb_ItinerarioViajero itinerario);
        
        #endregion        

        #region Programaciones

        Tb_ServiciosProgramados getProgramacionByCodigo(long codigoProgramacion);
        List<Tb_ServiciosProgramados> getListProgramaciones(long codigoItinerario);
        void updateProgramacion(Tb_ServiciosProgramados programacion);
        
        #endregion

        #region Evento

        List<Tb_Evento> getListEventoByProgramacion(long codigoProgramacion);
        void updateEvento(Tb_Evento evento);
        Tb_Evento getEventoByCodigo(long evento);
        void eliminarEvento(long codigo);
        
        #endregion

        #region Reportes

        List<Tb_Evento> getReporteOperaciones(FilterItinerarioCriteria filtro);
        List<Tb_Incidencia> getReporteIncidencia(FilterIncidentesCriteria filter);
        #endregion

        #region Eventos extraordinarios
        Tb_EventoExtraordinario getEventoExtraordinarioByID(int codigo);
        void eliminarEventoExtraordinario(int codigo);
        List<Tb_EventoExtraordinario> getListEventosExtByCriteria(FilterEventoExtCriteria criterios);
        Tb_EventoExtraordinario guardarEventoExtra(Tb_EventoExtraordinario eventoExtra);
        #endregion

        #region Informacion Tour
        void updatePaqueteProgramado(int paqueteProgramado);
        Tb_Tour addTour(Tb_Tour tour);
        void addDetalleTour(Tb_Tour tour, IList<Tb_Detalle_PaqueteProgramado> listaDetPaqProgramado);
        void addRecursoSolicitado(Tb_RecursosSolicitados recursoSolicitado);
        IList<Tb_PaqueteProgramado> getListPaqueteProgramadoPendientes();
        IList<Tb_Detalle_PaqueteProgramado> getListDetallePaqueteProgramado(int paquete);
        Tb_PaqueteProgramado getPaqueteProgramado(int codigoPaqute);
        IList<Tb_Detalle_Tour> addTourDetalle(Tb_Tour tour, int paqueteProgramado);
        void addDetalleTour(Tb_Detalle_Tour detalle);
        IList<Tb_RecursosSolicitados> getListRecursosSolicitados(int detalleTour);
        IList<Tb_RecursosSolicitados> getListRecursosSolicitados(int detalleTour, int tipoRecurso);
        IList<Tb_Detalle_Tour> getListDetalleTour(int tour);

        void eliminarRecursoSolicitado(int codigo);
        
        #endregion
    }
}
